home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #14 / Monster Media No. 14 (April 1996) (Monster Media, Inc.).ISO / lan / userinf2.zip / USERINFO.C < prev    next >
C/C++ Source or Header  |  1995-02-28  |  11KB  |  299 lines

  1. #include "userinfo.h"
  2.  
  3. void getspaceused(int);
  4.  
  5. void main(int argc, char *argv[])
  6. {  int numgroups, loop, servercount, serversattached, loop2;
  7.  
  8.   clrscr();
  9.   initmainnwcalls();
  10.   strcpy(searchObjectName,strupr(argv[1]));
  11.   if (argc == 1)
  12.     {  clrscr();
  13.        printf("\nUSERINFO: Return group and login information on a user.");
  14.        printf("\n\nSyntax: userinfo USERNAME");
  15.        printf("\nUSERNAME is a valid user on the network, otherwise NOT FOUND");
  16.        printf("\nis returned, along with a list of similar user names, if any.");
  17.        printf("\nUserinfo will return: ");
  18.        printf("\nSERVER NAME, date/time of last login, and group info.");
  19.     }
  20.   else
  21.     {  printf("Scanning for servers. . .");
  22.        servercount = scanforservers();
  23.        for (loop=0;loop<=servercount;loop++)
  24.          serversattached = getserverinfo(loop);
  25.        printf("\nNumber of servers to scan: %d\tUser: %s",serversattached,searchObjectName);
  26.        printf("\nServer        Date      Time      Groups");
  27.        printf("\n------      --------  --------    ------");
  28.        for (loop=0;loop<serversattached;loop++)
  29.          {  if ((getuserinfo(serverinfo[loop].yourconnHandle)) == 1)
  30.               {  if ((propertyValue[57]+ propertyValue[58]+ propertyValue[56]+
  31.                      propertyValue[59]+ propertyValue[60]+ propertyValue[61]) != 0)
  32.                    {  printf("\n%-10s  %02d/%02d/%02d  %02d:%02d:%02d ",serverinfo[loop].name,
  33.                               propertyValue[57],propertyValue[58],propertyValue[56],propertyValue[59],propertyValue[60],propertyValue[61]);
  34.                       numgroups = getgroupinfo(serverinfo[loop].yourconnHandle);
  35.                       for (loop2=0;loop2<=numgroups;loop2++)
  36.                         printf("%s  ",thegroups[loop2].group);
  37.                    } // if
  38.                  else
  39.                    {    printf("\n%-10s      Never logged in  ",serverinfo[loop].name);
  40.                         numgroups = getgroupinfo(serverinfo[loop].yourconnHandle);
  41.                         for (loop2=0;loop2<=numgroups;loop2++)
  42.                           printf("%s  ",thegroups[loop2].group);
  43.                    } // else
  44.               } // if
  45.             else
  46.               {  printf("\n%-10s  NOT FOUND",serverinfo[loop].name);
  47.                  scanforusers(serverinfo[loop].yourconnHandle);
  48.               }
  49.          } // for
  50.        getspaceused(serversattached);
  51.     } // else
  52. } // main
  53.  
  54. // Get information on a user
  55. int getuserinfo(NWCONN_HANDLE chandle)
  56. { int dataSetIndex = 1;
  57.   char objectName[48], buff[48], searchPropertyName[16], propertyName[16];
  58.   char propertyFlags, propertySecurity,propertyHasValue, moreProperties;
  59.   NWOBJ_TYPE searchObjectType, objectType;
  60.   NWFLAGS hasPropertiesFlag, objectFlag, objectSecurity, objectHasProperties;
  61.   BYTE moreSegments;
  62.   NWOBJ_ID objectID = -1;
  63.   long sequenceNumber = -1;
  64.   int FOUNDUSER = 0;
  65.   WORD nwrc;
  66.  
  67.   searchObjectType = OT_USER;
  68.   strcpy(searchPropertyName,"LOGIN_CONTROL");
  69.  
  70.   if (! NWScanObject(chandle,searchObjectName,searchObjectType,&objectID,
  71.     objectName,&objectType,&objectHasProperties,&objectFlag,&objectSecurity))
  72.     { FOUNDUSER = 1;
  73.       if (objectHasProperties)
  74.         {  sequenceNumber = -1;
  75.            if (! NWScanProperty(chandle,objectName,objectType,searchPropertyName,&sequenceNumber,
  76.                  propertyName,&propertyFlags,&propertySecurity,&propertyHasValue,&moreProperties))
  77.            if ((strcmp(propertyName,"LOGIN_CONTROL")) == 0)
  78.              if (propertyHasValue)
  79.                NWReadPropertyValue(chandle,objectName,objectType,propertyName,dataSetIndex,propertyValue,&moreSegments,&propertyFlags);
  80.         } /* if */
  81.     } /* while */
  82.   userid = NWLongSwap(objectID);
  83.   if (FOUNDUSER == 0)
  84.     return(0);
  85.   else
  86.     return(1);
  87. } //getuserinfo
  88.  
  89. // Scan for usernames
  90. void scanforusers(NWCONN_HANDLE chandle)
  91. {
  92.   char objectName[48], searchName[48];
  93.   NWOBJ_TYPE searchObjectType, objectType;
  94.   NWFLAGS objectFlag, objectSecurity, objectHasProperties;
  95.   NWOBJ_ID objectID = -1;
  96.  
  97.   searchObjectType = OT_USER;
  98.   strcpy(searchName,searchObjectName);
  99.   strncat(searchName,"*",2);
  100.  
  101.   printf("  Scanning:");
  102.   while (!(NWScanObject(chandle,searchName,searchObjectType,&objectID,
  103.     objectName,&objectType,&objectHasProperties,&objectFlag,&objectSecurity)))
  104.     printf("  %s",objectName);
  105.  
  106. } // scanforusers
  107.  
  108. int getgroupinfo(NWCONN_HANDLE chandle)
  109. //Get the groups a user is a member of
  110. { int groupcounter = 1, dataSetIndex, J, I, rc;
  111.   char objectName[48], buff[48], searchPropertyName[16], propertyName[16];
  112.   char propertyFlags, propertySecurity,propertyHasValue, moreProperties;
  113.   NWOBJ_TYPE searchObjectType, objectType;
  114.   NWFLAGS hasPropertiesFlag, objectFlag, objectSecurity, objectHasProperties;
  115.   BYTE propertyValue[128], moreSegments;
  116.   NWOBJ_ID objectID = -1;
  117.   long id2, sequenceNumber = -1;
  118.   NWOBJ_TYPE tmpType;
  119.  
  120.   searchObjectType = OT_USER;
  121.  
  122.  while (! NWScanObject(chandle,searchObjectName,searchObjectType,&objectID,objectName,&objectType,
  123.                &objectHasProperties,&objectFlag,&objectSecurity))
  124.   {
  125.        if (objectHasProperties)
  126.         {
  127.           sequenceNumber = -1;
  128.           strcpy(searchPropertyName,"*");
  129.           while (! NWScanProperty(chandle,objectName,objectType,searchPropertyName,&sequenceNumber,
  130.                propertyName,&propertyFlags,&propertySecurity,&propertyHasValue,&moreProperties))
  131.                  {  if (((strcmp(propertyName,"GROUPS_I'M_IN")) == 0) ||
  132.                          (strcmp(propertyName,"IDENTIFICATION") == 0))
  133.                       {  if (propertyHasValue)
  134.                            {  dataSetIndex = 1;
  135.                   do {
  136.                       if (! (rc = NWReadPropertyValue(chandle,objectName,objectType,propertyName,dataSetIndex,propertyValue,&moreSegments,&propertyFlags)))
  137.                           {
  138.                           if ((strcmp(propertyName,"IDENTIFICATION") == 0) || (strcmp(propertyName,"HOMEDIRPATH") == 0))
  139.                              strcpy(fullname,propertyValue);
  140.                           else
  141.                              if (propertyFlags & 2)
  142.                               {
  143.                                  for (J = 0, I = 0; I < 32; I++)
  144.                                   {
  145.                                     id2 = *(long *)&propertyValue[I * 4];
  146.                                     if (id2)
  147.                                      {
  148.                                         rc = NWGetObjectName(chandle,id2,buff,&tmpType);
  149.                                         if (rc != 0x0000)
  150.                                           {  printf(buff,"NWGetObjectName failed: %x\n",rc);
  151.                                               buff[0]= NULL;
  152.                                           }
  153.  
  154.                                       strcpy(thegroups[groupcounter].group,buff);groupcounter++;
  155.                                       if (++J > 2)
  156.                                         {
  157.                                           J = 0;
  158.                                         } // if
  159.                                      } // if
  160.                                   } // for
  161.                               }  // if
  162.                           else
  163.                             {
  164.                               for (J = 0, I = 0; I < 128; I++)
  165.                                 {
  166.                                   printf("%02x ",propertyValue[I]);
  167.                                   if (++J > 15)
  168.                                     {
  169.                                       J = 0;
  170.                                     }
  171.                                 } // for
  172.                              } // else
  173.                          dataSetIndex++;    // advance for next set
  174.                          } /* if */
  175.                       } /* do */
  176.                   while (moreSegments && !rc);
  177.                   } /* if */
  178.               } /* while */
  179.           } /* if */
  180.       } /* while */
  181.   }
  182.   return(groupcounter);
  183. } //getgroupinfo
  184.  
  185. int scanforservers()
  186. //scan the bindery for other servers
  187.  {  int binerror = 0, counter=0;
  188.     WORD nwrc;
  189.     char searchName[48], objectName[48];
  190.     NWOBJ_TYPE searchType = OT_FILE_SERVER, objectType;
  191.     NWOBJ_ID objectID = -1;
  192.     NWFLAGS hasPropertiesFlag, objectFlags, objectSecurity;
  193.  
  194.     strcpy(searchName,"*");
  195.     while (binerror == 0)
  196.       {  nwrc = (NWScanObject(connHandle, (char NWFAR *)searchName, searchType, (NWOBJ_ID NWFAR *)&objectID,
  197.             (char NWFAR *)&objectName, (NWOBJ_TYPE NWFAR *)&objectType, (NWFLAGS NWFAR *)&hasPropertiesFlag,
  198.             (NWFLAGS NWFAR *)&objectFlags, (NWFLAGS NWFAR *)&objectSecurity));
  199.          if (nwrc != 0x0000)
  200.            {  //printf("\nNWScanObject failed: %x",nwrc);
  201.               binerror = 1;   //getch(); exit(1);
  202.            }
  203.          else
  204.            {  binerror = 0;
  205.               strcpy(serverlist[counter].name,objectName);
  206.               counter++;
  207.            }
  208.        } // while
  209.      return(counter);
  210. } //scanforservers
  211.  
  212. int getserverinfo(servernum)
  213. //get information on a server
  214. {  int error = 0;  WORD nwrc;
  215.    VERSION_INFO fsinfotemp;
  216.    static unsigned int servercount;
  217.    NWCONN_HANDLE tempconnHandle;
  218.    int tempconnNumber;
  219.  
  220.     nwrc = (NWGetConnectionHandle((BYTE NWFAR *)&serverlist[servernum].name, 0,(NWCONN_HANDLE NWFAR *)&tempconnHandle, NULL));
  221.     if (nwrc != 0x0000)
  222.        error = 1;
  223.     if (error == 0)
  224.       {
  225.          nwrc = (NWGetConnectionNumber(tempconnHandle, &tempconnNumber));
  226.          if (nwrc != 0x0000)
  227.             {  printf("\nNWGetConnectionNumber failed: %x",nwrc);
  228.                exit(1);
  229.             }
  230.  
  231.     nwrc = (NWGetFileServerVersionInfo(tempconnHandle, (VERSION_INFO FAR *)&fsinfotemp));
  232.     if (nwrc != 0x0000)
  233.       { printf("\nNWGetFileServerVersionInfo: failed %04x",nwrc);
  234.         exit(1);
  235.       }
  236.  
  237.     strcpy(serverinfo[servercount].name,fsinfotemp.serverName);
  238.     serverinfo[servercount].connsinuse = fsinfotemp.connectionsInUse;
  239.     serverinfo[servercount].yourconnNumber = tempconnNumber;
  240.     serverinfo[servercount].yourconnHandle = tempconnHandle;
  241.     servercount++;
  242.   } //if error
  243.   return(servercount);
  244. } //getserverinfo
  245.  
  246. // find the space used by the user. . .
  247. void getspaceused(int serversattached)
  248. {  char username[48], serverName[48], volName[48], space2[48];
  249.    WORD nwrc;
  250.    NWSERVICE_VERSION majorVersion, minorVersion, revision;
  251.    NWNUMBER maxConnections, maxConnectionsUsed, connectionsInUse, numVolumes;
  252.    NWSUPPORT_LEVEL SFTLevel, TTSLevel;
  253.    NWVOL_NUM volNum=0;
  254.    int loop, volcounter=0, mainloop=0;
  255.    NWOBJ_ID objectID;
  256.    NWDISK_SPACE restriction, inUse;
  257.  
  258. for (mainloop=0;mainloop<serversattached;mainloop++)
  259.  { volcounter = 0;
  260.    nwrc = NWGetFileServerInformation(serverinfo[mainloop].yourconnHandle, (char NWFAR *)&serverName,
  261.    (NWSERVICE_VERSION NWFAR *)&majorVersion,(NWSERVICE_VERSION NWFAR *)&minorVersion,
  262.    (NWSERVICE_VERSION NWFAR *)&revision,(NWNUMBER NWFAR *)&maxConnections,
  263.    (NWNUMBER NWFAR *)&maxConnectionsUsed,(NWNUMBER NWFAR *)&connectionsInUse,
  264.    (NWNUMBER NWFAR *)&numVolumes, (NWSUPPORT_LEVEL NWFAR *)&SFTLevel,(NWSUPPORT_LEVEL NWFAR *)&TTSLevel);
  265.  
  266.    for (loop=0;loop<numVolumes;loop++)
  267.      {  nwrc =  NWGetVolumeName(serverinfo[mainloop].yourconnHandle, loop, (char NWFAR *)&volName);
  268.         if ((nwrc != 0x89FF) && (strlen(volName) > 0))
  269.           {  strcpy(serverinfo[mainloop].volinfo[loop].volname,volName);
  270.              volcounter++;
  271.           } // if
  272.      } // for
  273.    NWGetObjectID(serverinfo[mainloop].yourconnHandle, searchObjectName, OT_USER, (NWOBJ_ID NWFAR *)&objectID);
  274.    for (loop=0;loop<volcounter;loop++)
  275.      {
  276.         nwrc = NWGetObjDiskRestrictions(serverinfo[mainloop].yourconnHandle, loop, objectID,
  277.                 (NWDISK_SPACE NWFAR *)&restriction,
  278.                 (NWDISK_SPACE NWFAR *)&inUse);
  279.  
  280.         if (nwrc == 0x0000)
  281.           serverinfo[mainloop].volinfo[loop].spaceused = (unsigned long int) inUse * 4;
  282.         else
  283.           printf("\nnwrc = %04x\t\tID: %lx",nwrc,objectID);
  284.      } // for
  285. // since this is for WMD, modify to display what I want. . .
  286. //   printf("\nServer: %s\nVolume\tSpace",serverinfo[mainloop].name);
  287.   if (mainloop == 0)
  288.     {
  289.     printf("\n\nSpace Allocation table (in KB):");
  290.     printf("\nSERVER    ");
  291.     for (loop=0;loop<volcounter;loop++)
  292.       printf("%s\t",serverinfo[mainloop].volinfo[loop].volname);
  293.     printf("\n------   -----  -----   -----");
  294.     } // if
  295.     printf("\n%s",serverinfo[mainloop].name);
  296.    for (loop=0;loop<volcounter;loop++)
  297.       printf("\t%7lu",serverinfo[mainloop].volinfo[loop].spaceused);
  298.  } // for
  299. } // getspaceused